/**
 * 文件名：auth.js
 * 功能：用户认证状态管理 Store
 * 作用：管理用户登录状态、Token 存储、用户信息等
 * 模块关系：
 *   - 被登录组件调用：保存登录信息
 *   - 被 http.js 使用：提供 Token 给请求拦截器
 *   - 被路由守卫使用：判断用户是否已登录
 *   - 使用 localStorage：实现持久化存储
 * 作者：白永康
 * 学号：2501210209
 */
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'

export const useAuthStore = defineStore('auth', () => {
  // 状态
  const token = ref(localStorage.getItem('token') || '')
  const userId = ref(localStorage.getItem('userId') || '')
  const username = ref(localStorage.getItem('username') || '')

  // 计算属性：是否已登录
  const isLoggedIn = computed(() => !!token.value)

  /**
   * 登录成功后保存认证信息
   * @param {Object} authData - 包含 token、userId、username
   */
  function setAuth(authData) {
    token.value = authData.token
    userId.value = String(authData.userId)
    username.value = authData.username

    // 持久化到 localStorage
    localStorage.setItem('token', authData.token)
    localStorage.setItem('userId', String(authData.userId))
    localStorage.setItem('username', authData.username)
  }

  /**
   * 清除认证信息（退出登录）
   */
  function clearAuth() {
    token.value = ''
    userId.value = ''
    username.value = ''

    localStorage.removeItem('token')
    localStorage.removeItem('userId')
    localStorage.removeItem('username')
  }

  /**
   * 获取 Token（供 Axios 拦截器使用）
   */
  function getToken() {
    return token.value
  }

  return {
    // 状态
    token,
    userId,
    username,
    isLoggedIn,
    
    // 方法
    setAuth,
    clearAuth,
    getToken
  }
})
